#ifndef PE_HAND_RANGE
#define PE_HAND_RANGE

class HoldemState;
class iPlayerInfo;


#define WRPLAYERCOUNT 6
#define WRPOSCOUNT 4

union WizardRange
{
	void Init(double aBB16=0,double aBB11=0, double aBB6=0, double aBB3=0, double aBB1=0);
	void Init(double aBBvector[]);
	double GetRangeFromBB(double aBB);
public:
	double BBsVec[5];
	struct{
		double BB1;
		double BB3;
		double BB6;
		double BB11;
		double BB16;
	};	
};

struct WRPushTypeContainer
{
public:
	virtual void Init();
	float GetActionDoneRange(HoldemState& aHs,int aPose);
	float GetCurPlayerPushRange(HoldemState& aHs);
protected:
	WizardRange& GetTypedRange(int WRTypeCode,int WRPoseCode,int plCount);
protected:
	WizardRange OpenLimp	[WRPLAYERCOUNT-2][WRPOSCOUNT];
	WizardRange OpenRaise	[WRPLAYERCOUNT-2][WRPOSCOUNT];
	WizardRange OpenPush	[WRPLAYERCOUNT-2][WRPOSCOUNT];
	WizardRange CallPush	[WRPLAYERCOUNT-2][WRPOSCOUNT];
	WizardRange Call2Pushes	[WRPLAYERCOUNT-2][WRPOSCOUNT];
};


class ICMPokerRange
{
protected:
	virtual void Init();
public:
	float GetActionDoneRange(HoldemState& aHs,int aPose);
	float GetCurPlayerPushRange(HoldemState& aHs,int aPose);
};


#endif